package com.cy.hui_jie_dan.controller.user;

import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.kernel.util.ResponseChecker;
import com.alipay.easysdk.payment.facetoface.models.AlipayTradePrecreateResponse;
import com.cy.hui_jie_dan.comon.utils.QrcodeGenerator;
import com.cy.hui_jie_dan.popj.dto.payDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;

@RestController
@RequestMapping("/user/alipay")
@Slf4j
public class AliPayController {
    @Autowired
    QrcodeGenerator qrcodeGenerator;
//    // 支付宝开放平台API的网关地址
//    private static final String GATEWAY_URL = "https://openapi-sandbox.dl.alipaydev.com/gateway.do";
//
//    // 数据格式
//    private static final String FORMAT_JSON = "JSON";
//
//    // 字符集编码
//    private static final String CHARSET_UTF8 = "UTF-8";
//
//    // 签名方式
//    private static final String SIGN_TYPE_RSA2 = "RSA2";
//
//    // 自定义配置类，用于读取支付宝相关配置信息
//    @Autowired
//    private MyAliPayConfig myAliPayConfig;
//
//    /**
//     * 发起支付请求的接口
//     *
//     * @param aliPay 包含支付信息的对象
//     * @param httpResponse HTTP响应对象，用于返回支付表单
//     * @throws Exception 可能抛出的异常
//     */
//    @GetMapping("/pay")
//    public void pay(AliPay aliPay, HttpServletResponse httpResponse) throws Exception {
//        // 创建默认的支付宝客户端实例
//        AlipayClient alipayClient = new DefaultAlipayClient(GATEWAY_URL, myAliPayConfig.getAppId(),
//                myAliPayConfig.getAppPrivateKey(), FORMAT_JSON, CHARSET_UTF8, myAliPayConfig.getAlipayPublicKey(), SIGN_TYPE_RSA2);
//
//        // 创建API对应的request
//        AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
//        // 设置异步通知地址
//        request.setNotifyUrl(myAliPayConfig.getNotifyUrl());
//        request.setReturnUrl(myAliPayConfig.getReturnUrl());
//
//        // 设置请求参数
//        // 这里可以动态设置，例如从数据库或前端传入
//        aliPay.setTraceNo(UUID.randomUUID().toString().replaceAll("-", ""));
//        aliPay.setTotalAmount("100");
//        aliPay.setSubject("笔记本华硕");
//
//        // 构造业务请求参数
//        request.setBizContent("{\"out_trade_no\":\"" + aliPay.getTraceNo() + "\","
//                + "\"total_amount\":\"" + aliPay.getTotalAmount() + "\","
//                + "\"subject\":\"" + aliPay.getSubject() + "\","
//                + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
//
//        // 请求支付宝接口
//        String form = "";
//        try {
//            form = alipayClient.pageExecute(request).getBody(); // 调用SDK生成表单
//        } catch (AlipayApiException e) {
//            e.printStackTrace();
//        }
//
//        // 将表单直接输出到页面，用户点击后跳转到支付宝支付页面
//        httpResponse.setContentType("text/html;charset=" + CHARSET_UTF8);
//        httpResponse.getWriter().write(form);
//        httpResponse.getWriter().flush();
//        httpResponse.getWriter().close();
//    }
//
//    /**
//     * 处理支付宝异步通知的接口
//     *
//     * @param request HTTP请求对象，包含支付宝返回的通知信息
//     * @return 返回给支付宝的确认信息
//     */
//    @PostMapping("/notify")
//    @ResponseBody
//    public String payNotify(HttpServletRequest request) {
//        // 检查交易状态是否为成功
//        if ("TRADE_SUCCESS".equals(request.getParameter("trade_status"))) {
//            System.out.println("=========支付宝异步回调========");
//
//            // 存储所有请求参数
//            Map<String, String> params = new HashMap<>();
//            Map<String, String[]> requestParams = request.getParameterMap();
//            for (String name : requestParams.keySet()) {
//                params.put(name, request.getParameter(name));
//            }
//
//            // 获取交易信息
//            String tradeNo = params.get("out_trade_no");
//            String gmtPayment = params.get("gmt_payment");
//            String alipayTradeNo = params.get("trade_no");
//
//            // 打印交易信息
//            System.out.println("交易名称: " + params.get("subject"));
//            System.out.println("交易状态: " + params.get("trade_status"));
//            System.out.println("支付宝交易凭证号: " + params.get("trade_no"));
//            System.out.println("商户订单号: " + params.get("out_trade_no"));
//            System.out.println("交易金额: " + params.get("total_amount"));
//            System.out.println("买家在支付宝唯一id: " + params.get("buyer_id"));
//            System.out.println("买家付款时间: " + params.get("gmt_payment"));
//            System.out.println("买家付款金额: " + params.get("buyer_pay_amount"));
//
//            // 在这里可以更新数据库中的订单状态等信息
//            // 示例：ordersMapper.updateState(tradeNo, "已支付", gmtPayment, alipayTradeNo);
//        }
//
//        // 告诉支付宝，异步通知已经收到
//        return "success";
//    }
    @GetMapping("return")
    public void returnPay(HttpServletResponse response) throws Exception {
        // 设置响应的字符编码为UTF-8，防止中文乱码
        response.setCharacterEncoding("UTF-8");

        // 设置响应的内容类型为HTML，并指定字符编码为UTF-8
        response.setContentType("text/html; charset=UTF-8");

        // 重定向到指定的HTML页面（index.html）
        response.sendRedirect("/index.html");
    }
    @GetMapping(value = "/pay")
//    @GetMapping(value = "/pay",produces = MediaType.IMAGE_PNG_VALUE)
    public String pay1(payDTO payDTO) {


        String title = "shouj";
        String totalmoney = "99.00";
        try {
            AlipayTradePrecreateResponse response = Factory.Payment.FaceToFace().preCreate(title, payDTO.getOrderNumber(), totalmoney);
            if (ResponseChecker.success(response)) {
                log.info(response.getQrCode());
                return qrcodeGenerator.writeToStream(response.getQrCode(), 50, 50);
//                return qrcodeGenerator.generateQRCodeImage(response.getQrCode(), 300, 300);
            } else {
                log.error("调用失败，错误码: {}, 错误信息: {}", response.getCode(), response.getMsg());
                return "支付预创建失败";
            }
        } catch (Exception e) {
            log.error("支付预创建发生异常", e);
            // 这里可以进一步处理异常，比如返回更友好的错误信息给前端
            return "支付预创建发生异常";
        }
    }

}